import 'package:flutter/painting.dart';
import 'package:ideology/shared/widgets/code_input/highlight/highlight_theme.dart';
import 'package:ideology/shared/widgets/code_input/highlight/syntax_highlighter.dart';
import 'package:ideology/shared/widgets/code_input/highlight/syntax_preset.dart';

/// `.cloud` 文件语言的关键字集合。
///
/// 用于语法高亮时的关键字匹配，通常包含：
/// - **顶级块名**：例如 `project`, `build`
/// - **字段名**：在 `project` 与 `build` 块中常见的配置字段
///
/// 注意：匹配语义由 [SyntaxHighlighter] 控制，通常是按完整词边界匹配，
/// 不会误匹配字符串内部或部分单词。
const Set<String> cloudKeywords = {
  // 顶级块
  'project', 'build',

  // project 块字段
  'group', 'artifact', 'version',

  // build 块字段
  'srcDir', 'output',
};

/// 基于给定的 [base] 文本样式，创建 `.cloud` 文件的语法高亮预设。
///
/// 该方法会：
/// 1. 生成一个 [HighlightTheme]，其基础样式来源于传入的 [base]；
/// 2. 创建一个 [SyntaxHighlighter]，并传入：
///    - [cloudKeywords]：作为语言关键字集合；
///    - [theme]：语法高亮所需的颜色样式表。
/// 3. 返回一个 [SyntaxPreset]，其中包含了 `theme` 与 `highlighter`，
///    供代码输入控件直接使用。
///
/// > 注：当前示例中没有启用注释与字符串的正则匹配逻辑，
/// > 但在构造 [SyntaxHighlighter] 时，保留了可选参数的位置，
/// > 可以按需开启（如单行注释 `//...` 或字符串 `"..."`）。
///
/// ### 使用示例
/// ```dart
/// final preset = makeCloudPreset(
///   const TextStyle(fontFamily: 'Fira Code', fontSize: 14),
/// );
/// // 将 preset.theme 和 preset.highlighter 注入到代码输入控件中
/// ```
SyntaxPreset makeCloudPreset(TextStyle base) {
  // 基于传入的基础 TextStyle 构建浅色主题
  final theme = HighlightTheme.light(base: base);

  // 构建语法高亮器
  final highlighter = SyntaxHighlighter(
    keywords: cloudKeywords,
    theme: theme,
    // 如有需要，可以启用以下正则：
    // - 单行注释：匹配以 `//` 开头到行尾的注释
    // singleLineCommentPattern: RegExp(r'//.*$'),
    //
    // - 字符串字面量：匹配双引号内的内容（不跨行）
    // stringPattern: RegExp(r'"[^"\n]*"'),
  );

  // 返回包含高亮器和主题的预设对象
  return SyntaxPreset(highlighter: highlighter, theme: theme);
}
